package cn.drenal.capcap.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.drenal.capcap.common.Response;
import cn.drenal.capcap.entity.Category;
import cn.drenal.capcap.service.CategoryService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 分类控制器
 */
@RestController
@RequestMapping("/category")
@RequiredArgsConstructor
public class CategoryController {

    private final CategoryService categoryService;

    /**
     * 创建分类
     *
     * @param category 分类信息
     * @return 创建结果
     */
    @PostMapping
    @SaCheckPermission("content:category:add")
    public Response<Category> createCategory(@RequestBody Category category) {
        return Response.success(categoryService.createCategory(category));
    }

    /**
     * 更新分类
     *
     * @param id 分类ID
     * @param category 分类信息
     * @return 更新结果
     */
    @PutMapping("/{id}")
    @SaCheckPermission("content:category:edit")
    public Response<Category> updateCategory(@PathVariable Long id, @RequestBody Category category) {
        return Response.success(categoryService.updateCategory(id, category));
    }

    /**
     * 删除分类
     *
     * @param id 分类ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    @SaCheckPermission("content:category:delete")
    public Response<Void> deleteCategory(@PathVariable Long id) {
        categoryService.deleteCategory(id);
        return Response.success();
    }

    /**
     * 根据ID查询分类
     *
     * @param id 分类ID
     * @return 分类信息
     */
    @SaIgnore
    @GetMapping("/{id}")
    public Response<Category> getCategoryById(@PathVariable Long id) {
        return Response.success(categoryService.getCategoryById(id));
    }

    /**
     * 分页查询分类列表
     *
     * @param current 当前页
     * @param size 每页大小
     * @param name 分类名称（可选）
     * @param status 状态（可选）
     * @return 分类分页列表
     */
    @GetMapping("/page")
    @SaCheckPermission("content:category:list")
    public Response<Page<Category>> getCategoryPage(
            @RequestParam(defaultValue = "1") long current,
            @RequestParam(defaultValue = "10") long size,
            @RequestParam(required = false) String name,
            @RequestParam(required = false) Integer status) {
        Page<Category> page = new Page<>(current, size);
        return Response.success(categoryService.getCategoryPage(page, name, status));
    }
    
    /**
     * 获取所有启用的分类列表
     *
     * @return 分类列表
     */
    @SaIgnore
    @GetMapping("/list")
    public Response<List<Category>> getAllEnabledCategories() {
        return Response.success(categoryService.getAllEnabledCategories());
    }
    
    /**
     * 更新分类状态
     *
     * @param id 分类ID
     * @param status 状态：0-禁用，1-启用
     * @return 更新后的分类
     */
    @PutMapping("/{id}/status")
    @SaCheckPermission("content:category:edit")
    public Response<Category> updateCategoryStatus(
            @PathVariable Long id,
            @RequestParam Integer status) {
        return Response.success(categoryService.updateCategoryStatus(id, status));
    }
}